//symbol维护的是对象的字符串和属性值之间的关系，二者一一对应

console.log(
    // Symbol() === Symbol()
    Symbol('foo') === Symbol('foo')
); //false
// 访问全局 symbol 注册表的方法是 Symbol.for()和 Symbol.keyFor()；
// 它们斡旋在全局 symbol 表（或注册表）与运行时环境之间。
// symbol 注册表通常构建在 JavaScript 编译器基础设施，
// 所以 symbol 注册表的内容不会出现 JavaScript 运行时环境，
// 除了通过它们的反射方法。Symbol.for("tokenString") 方法从注册表返回一个 symbol 值，Symbol.keyFor(symbolValue) 方法从注册表返回 token 字符串



const s1 = Symbol.for('foo')
const s2 = Symbol.for('foo')
console.log(s1 === s2); //true
console.log(s1);


console.log('ss', Symbol("foo") !== Symbol("foo"));
const foo = Symbol()
const bar = Symbol()
console.log(typeof foo === "symbol");
console.log(typeof bar === "symbol");
let obj = {}
obj[foo] = "foo"
obj[bar] = "bar"
console.log(JSON.stringify(obj)); // {}
console.log(Object.keys(obj)); // []
console.log(Object.getOwnPropertyNames(obj)); // []
console.log(Object.getOwnPropertySymbols(obj)); // [ Symbol(), Symbol() ]